package cn.com.surker.production.service;

import cn.com.surker.production.entity.ProductionInvoice;
import cn.com.surker.production.entity.report.ProductionInvoiceReport;
import cn.com.surker.production.entity.vo.ProductionInvoiceVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 生产发货单表 服务类
 * </p>
 *
 * @author admin
 * @since 2024-07-25
 */
public interface ProductionInvoiceService extends IService<ProductionInvoice> {

	/**
	 * 查询显示全部信息的发货单
	 *
	 * @param erpDb
	 * @param startDate   起始时间
	 * @param endDate     截止时间
	 * @param createType  创建方式状态
	 * @param process
	 * @param pageIndex
	 * @param limit
	 * @return
	 */
	IPage<ProductionInvoiceVo> selectFullPage(String erpDb, String startDate, String endDate, String searchVal, String searchVal2,Long conId, Long indentId,
											  Integer createType, Integer process, Integer isAdd, Integer isLinked, Integer pageIndex, Integer limit);

	IPage<ProductionInvoiceVo> selectFullPageV2(String erpDb, String startDate, String endDate, String searchVal, Long conId, Long indentId,
												Integer createType, List<Integer> processList, Integer pageIndex, Integer limit);

	List<ProductionInvoiceVo> selectFullList(String erpDb, String startDate, String endDate, String searchVal, String searchVal2, Long conId, Long indentId,
											 Integer createType, Integer process, Integer isAdd);

	/**
	 * 查询发货单的总览信息,包含合同,任务单,泵送等信息,不包含转入转出
	 *
	 * @param id
	 * @return
	 */
	ProductionInvoiceVo queryOverview(String erpDb, Long orgId, Long id);

	/**
	 * 查询发货单的明显,包含转入转出
	 *
	 * @param id
	 * @return
	 */
	ProductionInvoiceVo queryDetail(String erpDb, Long orgId, Long id);

	/**
	 * 根据任务单查询发货单
	 *
	 * @param indentId
	 * @return
	 */
	List<ProductionInvoice> findByIndent(String orgDb, Long indentId);

	List<ProductionInvoiceVo> findList(String orgDb, String startTime, String endTime);

	/**
	 * 查询发货单的运输方量,包括发货单的生产方量和转入方量
	 *
	 * @param invoiceId
	 * @return
	 */
	Double queryTranStere(Long invoiceId);

	ProductionInvoiceReport findLabIndentSum(String dbCode, String searchVal, String startTime, String endTime);
	/**
	 * 技术部开盘鉴定台账
	 * @param dbCode
	 * @return
	 */
	IPage<ProductionInvoiceReport> findLabIndentReport(String dbCode, String searchVal, String startTime, String endTime,
													   Integer offset, Integer limit);
	/**
	 * 分页查询任务单台账
	 * @param dbCode
	 * @return
	 */
	IPage<ProductionInvoiceReport> findIndentReport(String dbCode, String searchVal, String startTime, String endTime,
													Integer proType, Integer offset, Integer limit);

	/**
	 * 任务单详情
	 * @param dbCode
	 * @param indentId
	 * @return
	 */
	ProductionInvoiceReport findIndentDetail(String dbCode, Long indentId);

	/**
	 *
	 * @param dbCode
	 * @return
	 */
	ProductionInvoiceReport findIndentSum(String dbCode, String searchVal, String startTime, String endTime, Integer proType);
	/**
	 * 导出技术部开盘鉴定台账数据
	 * @param dbCode
	 * @return
	 */
	List<ProductionInvoiceReport> findLabIndentReport(String dbCode, String searchVal, String startTime, String endTime);

	/**
	 * 查询合同的发货方量
	 *
	 * @param dbCode 数据源
	 * @param conId  合同id
	 * @return
	 */
	Double queryConSendStere(String dbCode, Long conId);

	/**
	 * 查询合同的施工方退回方量
	 *
	 * @param dbCode 数据源
	 * @param conId  合同id
	 * @return
	 */
	Double queryConBakStere(String dbCode, Long conId);

	/**
	 * 查询发货单的生产方量
	 *
	 * @param dbCode
	 * @param invoiceId
	 * @return
	 */
	Double queryProStere(String dbCode, Long invoiceId);

	/**
	 * 查询累计车次和方量
	 *
	 * @param indentId
	 * @return totalCar:累计车次;totalStere:累计方量
	 */
	Map<String, Object> queryTotalStere(String dbCode, Long indentId);

	/**
	 * 查询运输车辆列表
	 *
	 * @param dbCode
	 * @param indentId
	 * @return
	 */
	List<String> findTranCar(String dbCode, Long indentId);
}